// // es5 原型链继承
// function Animal(){

// }
// function Dog(){
//   // 经典继承 构造函数继承 
//   Animal.call(this)
// };
// // 原型链继承 
// Dog.prototype=new Animal();


// ES6继承
// 1.子类继承自父类
// 2.子类的原型对象继承父类的原型对象
class Animal{
  constructor(name,age,weight){
    // 实例的私有属性
    this.name=name;
    this.age=age;
    this.weight=weight;
    console.log('我是父构造器');
  }
  // 存放在原型对象中
  sayName(){
    console.log('我是父原型对象中的方法');
  }
  static attr='我是父静态属性';
  static AnimalMethod(){
    console.log('我是父静态方法');
  }
};
class Dog extends Animal{
  constructor(name,age,weight,color){
    // 使用super函数继承父类 先执行父构造器 在执行子构造器
    super(name,age,weight); //类似于 Animal.call(this)
    this.color=color;
    console.log('我是子构造器');
  };
  sayName(){
    console.log('我是子类的原型对象中的方法');
  }
};
let dog1=new Dog('可乐',1,'20kg','白色');
console.log(dog1);
// 子类的原型对象继承父类的原型对象
dog1.sayName();
console.log(Dog.prototype.__proto__===Animal.prototype);
// 子类继承自父类
Dog.AnimalMethod();
console.log(Dog.__proto__===Animal);
console.log(Dog.attr);